import { Observable } from "../Observable";
/**
 *RxJS 的 fromEvent 函数允许你将浏览器事件转换为 Observable。它接受两个参数：
 *第一个参数是事件目标，例如 DOM 元素或window对象
 *第二个参数是事件名称，例如click或scroll
 *
 *
 *
 * @param {*} target 文档对象
 * @param {*} eventName 事件名
 * @returns
 */
export function fromEvent(target, eventName) {
  return new Observable((subscriber) => {
    // 1. 创建事件函数函数
    const handler = (...args) => subscriber.next(...args);
    // 2. 给DOM元素绑定事件名对应的处理函数
    target.addEventListener(eventName, handler);
    //_subscribe执行的结果可以返加一个取消订阅的函数
    return () => {
      target.removeEventListener(eventName, handler);
    };
  });
}
